iT邦幫忙

2018 iT 邦幫忙鐵人賽
DAY 14
2
Modern Web

30天學習Spring MVC系列 第 14

Day 14-Spring Boot-Log日誌管理篇

  • 分享至 

  • xImage
  •  

前言

在開發網站時最重要的事情就是你要記錄使用者的行為,
Why?
1.好的紀錄可以讓你快速的找到錯誤點
2.分析使用者行為
3.紀錄重要資料的維護
4.當公司有人竊取機密時,可以將紀錄有效的紀錄是哪個內鬼!!!!!
5.幫助找到程式的BUG
6.其他

Log是網站非常重要的功能之一了,在現今的平台上,不論是對外的使用者,還是對內企業管理,我們往往都會遇到
許多Bug或是錯誤在某一天的就發生了,當你的紀錄都在伺服器預設的檔案內,要查閱紀錄根本就是大海撈針
所以我們這篇來分享一下如何使用Spring Boot建置日誌功能

不需要添加依賴

在Spring-Boot-Starter內已經有了spring-boot-starter-logging,他是Spring Boot默認的日誌Jar

輸出的層級

在傳統的log4j裡,日誌總共有分為
1.TRACE
2.DEBUG
3.INFO
4.WARN
5.ERROR
6.FATAL

日誌管理上是有權限的高低,就如同伺服器的Log也有權限高低的配置一樣,他們的高低順序為
TRACE < DEBUG < INFO < WARN < ERROR < FATAL

application.properties

如果你要使用Spring Boot提供的日誌功能的話
你可以在application.properties設置其 名稱 or路徑與輸出的級別
ex:
logging.file = "logName.log" #絕對路徑,會在你的專案內新增一個名稱為logName.log檔案
你也可以自訂log路徑
logging.path = "filePath.log" #相對路徑,會在路徑內新增一個filePath.log檔案

註:logging.file屬性與logging.path屬性不能同時使用,只能設定一種

如果你只想紀錄ERROR與FATAL級別的話,你可以自訂要輸出的級別
logging.level.root =ERROR

以INFO級別為例子,成功輸出後,CONSOLE主控台輸出的結果將會存入我們的log日誌內,如下圖

https://ithelp.ithome.com.tw/upload/images/20180102/20107812NlD5wEvR14.png

Spring日誌介紹

常見的日誌系統有
1.Logback:

  • 常見配置檔名稱:logback-spring.xml, logback-spring.groovy, logback.xml

2.Log4j

  • 常見配置檔名稱:log4j-spring.properties,log4j.properties

3.SL4J

  • 常見配置檔名稱:log4j.properties(與log4j)相同

Spring-Boot建議使用帶有Spring的日誌系統,建議使用Logback

建立logback.xml

在src/main/resources底下建立logback.xml

在logback.xml的起始標籤為

ex:

<configuration scan="true" scanPeriod="60 seconds" debug="false">

scan屬性為true時:當配置文件被改變將回重新載入
scanPeriod:監測文件是否有修改的時間間隔
debug:設定為true將會把logback運作輸出在控制台,一般設定為false

我的配置檔

<configuration scan="true" scanPeriod="60 seconds" debug="false">
<contextName>logback-test</contextName>

<property name="logback.dir" value="C:/Users/User/SpringTutorial/tutorial2"/>
<appender name="fileInfoLog" class="ch.qos.logback.core.rolling.RollingFileAppender">
<!--
過濾器設定
-->
<!--
<filter class="ch.qos.logback.classic.filter.LevelFilter">
-->
<!-- 過濾 ERROR -->
<!-- <level>ERROR</level> -->
<!-- 遇到ERROR就過濾 -->
<!-- <onMatch>DENY</onMatch> -->
<!-- 没有匹配到就新增 -->
<!-- <onMismatch>ACCEPT</onMismatch> -->
<!-- </filter> -->
<!--
  日誌名稱,如果没有File 属性,默認使用FileNamePattern的文件路徑
    如果同時有<File>和<FileNamePattern>,默認當天日誌是<File>
-->
<File>info.log</File>
<!-- 滾動日誌,按照時間滾動 TimeBasedRollingPolicy -->
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<!-- 文件路徑,定義日誌一天產生一筆 相關屬性可以在參閱文件做設定 -->
#
<FileNamePattern>error.log.%d{yyyy-MM-dd}.log</FileNamePattern>
<!-- 設定保留日誌天數 -->
<maxHistory>30</maxHistory>
<!-- 設定日誌的容量上限,超過則會清除 -->
<!-- <totalSizeCap>1GB</totalSizeCap> -->
</rollingPolicy>
<!-- 日誌輸出的編碼方式 ,中文就使用UTF8 -->
<encoder>
<charset>UTF-8</charset>
<pattern>%d [%thread] %-5level %logger{36} %line - %msg%n</pattern>
</encoder>

</appender>
<appender name="fileErrorLog" class="ch.qos.logback.core.rolling.RollingFileAppender">
<!--
過濾器,默認為 info 级别的,ThresholdFilter
-->
<filter class="ch.qos.logback.classic.filter.ThresholdFilter">
<level>Error</level>
</filter>
<!--日誌名稱-->
<File>${logback.logdir}/error.${logback.appname}.log</File>

<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">

<FileNamePattern>
${logback.logdir}/error.${logback.appname}.%d{yyyy-MM-dd}.log
</FileNamePattern>

<maxHistory>90</maxHistory>

</rollingPolicy>
<!-- 日誌輸出編碼 -->
<encoder>
<charset>UTF-8</charset>
<pattern>%d [%thread] %-5level %logger{36} %line - %msg%n</pattern>
</encoder>
</appender>
<root level="info">
<appender-ref ref="fileInfoLog"/>
<appender-ref ref="fileErrorLog"/>
</root>
</configuration>

logback標籤介紹

<root>:必須設定 -定義輸出級別
<contextName>:不是必要,設定於輸出別名使用
<property>:設置變數,我們可以使用${}取得property的value
<appender>:name屬性定義此appender名稱,可以使用多個appender,class則是要使用哪種方式做輸出
ex:

  • ch.qos.logback.core.ConsoleAppender:輸出於主控台
  • ch.qos.logback.core.rolling.RollingFileAppender:輸出於文件,使用Rolling滾動策略
    <loger>:用來設定一個package內或一個class內,要輸出的級別控制

參考資料:

(http://blog.csdn.net/hrbeuwhw/article/details/78637573 )

心得

其實我認為也可以只使用log4j的配置就好...配置多真的要人命
如果你不需要將Log分的這麼細的話就使用log4j吧!!!

重點說明

1.我們可以添加過濾器來控制我們要的內容
2.我們可以新增多個appender,輸出多個檔案將檔案分類
3.我們可以將檔案輸出到我們要的路徑
4.做好良好的日誌輸出內容


上一篇
Day 13-Spring Boot-實現一個登錄功能(不含驗證)
下一篇
Day 15-Spring Boot - Spring Session介紹(上)
系列文
30天學習Spring MVC30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言